package com.yhy.wxzn.wcs.enums;

import com.alibaba.fastjson.serializer.JSONSerializable;
import com.alibaba.fastjson.serializer.JSONSerializer;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.AllArgsConstructor;
import lombok.Getter;

import java.io.IOException;
import java.lang.reflect.Type;


@Getter
@AllArgsConstructor
public enum TaskStatus implements JSONSerializable {

    /**
     * 新建
     */
    READY("新建", 99999999),
    /**
     * 已下发
     */
    SEND("已下发", 9999999),
    /**
     * 已开始
     */
    START("已开始", 9999999),


    NULL( "无任务",-1),


    /**
     * 任务新生成等待执行（指插入到数据库）
     */
    NEW( "新生成",0),
    /**
     * 任务进入等待执行队列（指从数据库中取出排队）
     */
    WAIT( "等待执行中",1),
    /**
     * 任务进行中
     */
    ON_GOING( "任务进行中",2),
    /**
     * 已完成
     */
    FINISH("已完成", 3),

    /**
     * 任务完成且提交WMS
     */
    COMMITTED( "已提交WMS",100),
    /**
     * 取消
     */
    CANCEL( "取消",200),
    /**
     * 错误
     */
    ERROR( "错误",500),
    /**
     * 避让状态
     */
    AVOID("避让状态",700);



    @JsonValue
    private String description;
    @EnumValue
    private int taskProgress;



    @Override
    public String toString() {
        return description;
    }

    public static TaskStatus parseTaskProgress(int taskProgress) {
        TaskStatus[] taskProgresses = TaskStatus.values();
        for (TaskStatus progress : taskProgresses) {
            if (progress.taskProgress == taskProgress) {
                return progress;
            }
        }
        throw new IllegalArgumentException("任务状态参数异常");
    }


    @Override
    public void write(JSONSerializer jsonSerializer, Object o, Type type, int i) throws IOException {
        jsonSerializer.write(this.getDescription());
    }
}
